package com.example.chat.service;

import com.example.chat.domain.Group;
import com.example.chat.domain.GroupMember;
import com.example.chat.domain.GroupMessage;
import com.example.chat.domain.MessageDTO;

import java.util.List;

public interface GroupService {
    /**
     * 创建群组
     * @param group 群组信息
     * @return 群组ID
     */
    Long createGroup(Group group);
    
    /**
     * 获取群组信息
     * @param groupId 群组ID
     * @return 群组信息
     */
    Group getGroup(Long groupId);
    
    /**
     * 更新群组信息
     * @param group 群组信息
     * @return 是否更新成功
     */
    boolean updateGroup(Group group);
    
    /**
     * 解散群组
     * @param groupId 群组ID
     * @param userId 操作用户ID（群主）
     * @return 是否解散成功
     */
    boolean dissolveGroup(Long groupId, Long userId);
    
    /**
     * 添加群组成员
     * @param groupMember 群组成员信息
     * @return 是否添加成功
     */
    boolean addGroupMember(GroupMember groupMember);
    
    /**
     * 获取群组成员列表
     * @param groupId 群组ID
     * @return 成员列表
     */
    List<GroupMember> getGroupMembers(Long groupId);
    
    /**
     * 移除群组成员
     * @param groupId 群组ID
     * @param userId 用户ID
     * @param operatorId 操作者ID
     * @return 是否移除成功
     */
    boolean removeGroupMember(Long groupId, Long userId, Long operatorId);
    
    /**
     * 退出群组
     * @param groupId 群组ID
     * @param userId 用户ID
     * @return 是否退出成功
     */
    boolean quitGroup(Long groupId, Long userId);
    
    /**
     * 保存群组消息
     * @param messageDTO 消息传输对象
     * @return 保存的消息
     */
    GroupMessage saveGroupMessage(MessageDTO messageDTO);
    
    /**
     * 获取群组历史消息
     * @param groupId 群组ID
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 消息列表
     */
    List<GroupMessage> getGroupMessages(Long groupId, Integer offset, Integer limit);
    
    /**
     * 撤回消息
     * @param messageId 消息ID
     * @param userId 操作用户ID
     * @return 是否撤回成功
     */
    boolean recallMessage(Long messageId, Long userId);
} 